﻿<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
</head>
<body>
    <p>凡是这样签名的方法：object.method(arg1, arg2, ...)的方法，都可以采用method.apply(object, [arg1, arg2, ...])进行调研。</p>
    <p>array的某些方法（不会修改array状态）可以使用arguments以Array.prototype.method.apply(arguments,[arg1, arg2, ...])的方式调用。</p>
    <p>这和鸭子类型有关系：</p>
    <ul>
        <li>前者：把array当成arguments</li>
        <li>后者：把argument当成array</li>
    </ul>
</body>
</html>
<script type="text/javascript">
    console.log(Math.max.apply(Math, [3, 2, 1]));

    var arr = [1, 2, 3]
    Array.prototype.push.apply(arr, [4, 5, 6]);
    console.log(arr);

    (function () {
        var arr = Array.prototype.slice.apply(arguments);
        console.log(arr);
    })(1, 2, 3);

    var arr = Array.prototype.slice.apply({ 0: 1, 1: 2, 2: 3, length: 3 });
    console.log(arr);
</script>
